package modele;

/**
 * Classe representant un album
 * @author Plancq Charlotte, Lanvin Kévin, Darras Raphael
 *
 *
 */
public class Album {
	/**
	 *Contient le chemin menant a l'image de la pochette de l'album
	 */

	protected String image;
	/**
	 *Determine le titre de l'album
	 */
	protected String titre;
	/**
	 * Determine l'editeur de l'album
	 */
	protected String editeur;
	/**
	 *Determine le titre de l'album
	 */
	protected String auteur;
	/**
	 *Determine l'auteur de l'album
	 */
	protected String genre;
	/**
	 *Determine le genre de l'album
	 */
	protected String serie;
	/**
	 *Determine la serie a laquelle appartient l'album
	 */
	protected String synopsis;
	/**
	 *Determine le synopsis de l'album
	 */
	protected String commentaire;
	/**
	 *Determine la note de l'album
	 */
	protected int note;
/**
 * Constructeur de l'album
 * @param titre
 * @param auteur
 * @param editeur
 * @param genre
 * @param serie
 * @param synopsis
 * @param note
 * @param commentaire
 * @param image
 */
	
	public Album(String titre,String auteur, String editeur, String genre, String serie,  String synopsis, int note,String commentaire,String image){
		this.titre=titre;
		this.auteur=auteur;
		this.editeur=editeur;
		this.genre=genre;
		this.serie=serie;
		this.synopsis=synopsis;
		this.note=note;
		this.commentaire=commentaire;
		this.image=image;
	}
/**
 * Donne le titre de l'album
 * @return string
 */
	public String getTitre(){return this.titre;}/**
	 * Donne l'editeur de l'album
	 * @return string
	 */
	public String getEditeur(){return this.editeur;}
	/**
	 * Donne l'editeur de l'album
	 * @return string
	 */
	public String getAuteur(){return this.auteur;}/**
	 * Donne le genre de l'album
	 * @return string
	 */
	public String getGenre(){return this.genre;}
	/**
	 * Donne le synopsis de l'album
	 * @return string
	 */
	public String getSynopsis(){return this.synopsis;}
	/**
	 * Donne le commentaire attribue a l'album
	 * @return string
	 */
	public String getCommentaire(){return this.commentaire;}
	/**
	 * Donne la note attribuee de l'album
	 * @return string
	 */
	public int getNote(){return this.note;}
	/**
	 * Donne la serie a laquelle appartient l'album
	 * @return int
	 */
	public String getSerie(){return this.serie;}

/**
 * Attribue un commentaire a l'album
 * @param String comment
 */
	public void setCommentaire(String comment){
		this.commentaire=comment;
	}
	/**
	 * Attribue une note a l'album
	 * @param int note
	 */
		
	public void setNote(int note){
		if(0<note || note<10) this.note=note;
		else throw new IllegalArgumentException();
	}
	/**
	 * Attribue un auteur a l'album
	 * @param String auteur
	 */
	public void setAuteur(String auteur){
		this.auteur=auteur;
	}
	/**
	 * Attribue un editeur a l'album
	 * @param String editeur
	 */
	public void setEditeur(String editeur){
		this.editeur=editeur;
	}
	/**
	 * Attribue un titre a l'album
	 * @param String titre
	 */
	public void setTitre(String titre){
		this.titre=titre;
	}
	/**
	 * Attribue un genre a l'album
	 * @param String genre
	 */
	public void setGenre(String genre){
		this.genre=genre;
	}	
	/**
	 * Attribue un synopsis a l'album
	 * @param String synopsis
	 */
	public void setSynopsis(String synopsis){
		this.synopsis=synopsis;
	}
	/**
	 * Attribue une serie a laquelle l'album appartient
	 * @param String serie
	 */
	public void setSerie(String serie){

		this.serie=serie;
	}
/**
 * Parcours les attribut de l'album en verifiant d'abord qu'ils ne sont pas null,
 *  et retourne vrai si la chaine de caractere en parametre correspond a l'un des attributs.
 * @param String recherche
 * @return boolean
 */
	/**
	 * 
	 * @param recherche	le chaine de caracteres recherch�e dans les diff�rents parametres de l'album
	 * @return vrai si l'album contient l'argument, faux sinon
	 */
	public boolean contains (String recherche){

		
		if(this.titre!=null && this.titre.contains(recherche) 
				|| this.auteur!=null && this.auteur.contains(recherche) 
				|| this.editeur!=null && this.editeur.contains(recherche)
				|| this.genre!=null && this.genre.contains(recherche)
				|| this.serie!=null && this.serie.contains(recherche))
			return true;
		return false;
	}
/**
 * Parcours les attribut de l'album ainsi que ceux de l'album en parametre en verifiant d'abord qu'ils ne sont pas null, 
 * retourne vrai si l'album en parametre correspond a l'album etudie.
 * @param album a
 * @return boolean
 */
	/**
	 * Compare l'album avec un album en param�tre, champ par champ
	 * @param a l'album � comparer
	 * @return vrai si les deux albums ont au moins un champ en commun
	 */
	public boolean correspond (Album a){
		return (this.auteur!=null && a.getAuteur()!=null &&  !a.getAuteur().equals("") && !this.auteur.equals("") &&  this.auteur.contains(a.getAuteur()))
		|| (this.editeur!=null && a.getEditeur()!=null && !a.getEditeur().equals("") && !this.editeur.equals("") && this.editeur.contains(a.getEditeur())) 
		|| (this.genre!=null && a.getGenre()!=null && !a.getGenre().equals("") && !this.genre.equals("") && this.genre.contains(a.getGenre()))
		|| (this.serie!=null && a.getSerie()!=null && !a.getSerie().equals("") && !this.serie.equals("") && this.serie.contains(a.getSerie()))
		|| (this.titre!=null && a.getTitre()!=null && !a.getTitre().equals("") && !this.titre.equals("") && this.titre.contains(a.getTitre()));
	}
/**
 * Affiche une representation textuelle d'un album,
 * donne le tittre, l'auteur, l'editeur ainsi que la note.
 * @return String
 */
	public String toString(){
		return this.titre+"     "+this.auteur+"      "+this.editeur+"     "+this.note+"/10";
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((auteur == null) ? 0 : auteur.hashCode());
		result = prime * result
		+ ((commentaire == null) ? 0 : commentaire.hashCode());
		result = prime * result + ((editeur == null) ? 0 : editeur.hashCode());
		result = prime * result + ((genre == null) ? 0 : genre.hashCode());
		result = prime * result + ((titre == null) ? 0 : titre.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Album other = (Album) obj;
		if (auteur == null) {
			if (other.auteur != null)
				return false;
		} else if (!auteur.equals(other.auteur))
			return false;
		if (editeur == null) {
			if (other.editeur != null)
				return false;
		} else if (!editeur.equals(other.editeur))
			return false;
		if (genre == null) {
			if (other.genre != null)
				return false;
		} else if (!genre.equals(other.genre))
			return false;
		if (titre == null) {
			if (other.titre != null)
				return false;
		} else if (!titre.equals(other.titre))
			return false;
		return true;
	}
/**
 * Donne le chemin permettant de trouver l'image dans la base de donnee
 * @return String
 */
	public String getImage() {
		return this.image;
	}
}
